import { defineConfig, loadEnv } from 'vite';
import { fileURLToPath, URL } from 'node:url';
import vue from '@vitejs/plugin-vue';
// 导入自动导包的插件
import AutoImport from 'unplugin-auto-import/vite';
// 导入自动导vue组件的插件
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
// 导入模块化导入svg的插件
import UnpluginSvgComponent from 'unplugin-svg-component/vite';
//mock插件提供方法
import { viteMockServe } from 'vite-plugin-mock';
//自动导入 Element Plus Icon
// import Icons from 'unplugin-icons/vite';
// import IconsResolver from 'unplugin-icons/resolver';

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, process.cwd());

  return {
    plugins: [
      vue(),
      AutoImport({
        // imports用来指定需要自动导入的包
        imports: ['vue', 'pinia', 'vue-router'],
        // 自动生成类型描述文件
        dts: './src/types/auto-imports.d.ts',
        // 指定一个目录，目录下的文件会被自动导入
        dirs: ['./src/**/*'],
        // 是否支持在vue模版中使用自动导入
        vueTemplate: true,

        resolvers: [
          // 自动导入Element-Plus包
          ElementPlusResolver({ importStyle: true }),
          // 自动导入图标组件
          // IconsResolver({
          //   // prefix: 'icon',
          // }),
        ],
      }),

      Components({
        // 自动导入指定目录下的vue组件
        dirs: ['./src/components', './src/views', './src/layout'],
        // 自动生成类型描述文件
        dts: './src/types/components.d.ts',

        resolvers: [
          // 自动注册Element-Plus中的vue组件
          ElementPlusResolver({ importStyle: true }),
          // 自动注册图标组件
          // IconsResolver({
          //   // prefix: 'icon',
          //   // 指定collection，即指定为elementplus图标集ep
          //   enabledCollections: ['ep'],
          // }),
        ],
      }),
      UnpluginSvgComponent({
        // svg文件目录
        iconDir: ['./src/assets/svg'],
        // 是否自动生成类型描述文件
        dts: true,
        // 类型描述文件目录
        dtsDir: './src/types',
        // 图标名字前缀 "icon-图标名字"
        prefix: 'icon',
        // 保留颜色的svg目录
        preserveColor: fileURLToPath(new URL('./src/assets/svg/preserveColor', import.meta.url)),
      }),
      viteMockServe({
        mockPath: './mock',
      }),
      // Icons({
      //   autoInstall: true,
      // }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
      },
    },
    css: {
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: '@import "./src/assets/styles/variables.scss";',
        },
      },
    },
    server: {
      proxy: {
        [env.VITE_APP_BASE_API]: {
          target: env.VITE_SERVE, // 获取数据服务器地址设置
          changeOrigin: true, // 需要代理跨域
          rewrite: (path) => path.replace(/^\/api/, ''), // 路径重写
        },
      },
    },
  };
});
